// 列表比较大小
//
// @author 风杨
// @date 22-9-28 下午4:42
// @see <a href="yueny09@163.com">mailTo: yueny09@163.com</a>
//

pub fn largest_main() {
    let number_list = vec![1, 66, 8, 19, 26, 99];
    let rs = largest(&number_list);
    // let rsS = largestSlice(&number_list);
    println!("The largest number is {}.", rs);

    let char_list = vec!['y', 'm', 'a', 'q'];
    let rs = largest(&char_list);
    // let rsS = largestSlice(&char_list);
    println!("The largest char is {}.", rs);

}

/// 一个可以用于任何实现了 PartialOrd 和 Copy trait 的泛型的 largest 函数
fn largest<T: PartialOrd + Copy>(x: &[T]) -> T{
    // 假设index 0 为最大值
    let mut largerVal = x[0];

    for &item in x {
        if item > largerVal {
            largerVal = item;
        }
    }

    largerVal
}

// /// 一个可以用于任何实现了 PartialOrd 和 Copy trait 的泛型的 largest 函数
// fn largestSlice<T: PartialOrd>(x: &[T]) -> &T{
//     let mut maxValPosition = 0;
//
//     for i in 0..x.len() {
//         // println!("i/size: {}/{}.", i, x.len());
//
//         if i+1 >= x.len() {
//             // 越界
//             break;
//         }
//
//         // TODO  未实现
//         if x[i] > x[i+1]{
//             maxValPosition = i;
//         }
//     }
//
//     &x[maxValPosition]
// }

#[test]
fn test(){
    largest_main();
}